/**
 *  将 base64 格式图片转换为 File 对象形式, 并以 FromData 对象格式返回
 * @param {imageBase64} dataurl
 * @returns {FormData}
 */
export function toFile(dataurl, fileName) {
  // dataurl  base64格式的图片
  // fileName   生成文件的名字
  fileName = fileName + ".png";

  // 解码 base64 格式字符串， btoa 用于编码 base64 字符串
  const bytes = window.atob(dataurl.split(",")[1]);
  /**
   * ArrayBuffer 是 JavaScript 用来处理二进制的，ArrayBuffer 对象保存着原始二进制数据，
   * 它不能对数据进行操作，只能通过视图类（ TypeArray 或 DataView）才能对数据进行读写。
   * TypeArray 是类型数组，具体化的由 Uint8Array 等，视图由 DataView
   * Buffer 实际上就是 Uint8Array
   *
   */
  // 创建 ArrayBuffer
  const ab = new ArrayBuffer(bytes.length);
  // console.log(ab, "ab");
  // 以 ArrayBuffer 为参数创建 Uint8Array，并进行数值 copy
  const ia = new Uint8Array(ab);
  // console.log(ia, "ia");
  for (let i = 0; i < bytes.length; i++) {
    // 返回字符串第一个字符的 Unicode 编码， H 为 72
    ia[i] = bytes.charCodeAt(i);
  }
  /**
   * 第一个参数是一个字符串数组。数组中的每一个元素对应着文件中一行的内容。
   * 第二个参数就是文件名字符串。
   * 第三个参数用来指定文件类型
   */
  let fileImg = new File([ab], fileName, { type: "image/png" });

  // 创建表单实例并向里面添加数据
  const fd = new FormData();
  fd.append("file", fileImg);

  return fd;
}
